#ifndef IMAGEANNITEM_H
#define IMAGEANNITEM_H

#include <opencv2/opencv.hpp>
#include <iostream>
#include <vector>
#include <string>
#include "utility.h"

using namespace std;

// 表示一个标注项，如一个坐标点，一个矩形、一个多边形等。
class ImageAnnItem
{
public:
    // 清空
    void clear()
    {
        AnnType = Empty_Type;
        points.clear();
    }

    // 重载 == 运算符
    bool operator==(const ImageAnnItem& rhs)
    {
        return (this->AnnType == rhs.getAnnType()) && (this->points == rhs.getPoints());
    }

    /*-----------------getter-----------------*/
    // 返回标注项的数据
    const vector<cv::Point>& getPoints() const
    {
        return points;
    }
    vector<cv::Point>& getPoints()
    {
        return points;
    }

    // 返回当前标注项的标注类型
    Type getAnnType() const
    {
        return AnnType;
    }

    /*-----------------setter-----------------*/
    // 设置当前标注项的类型
    void setAnnType(Type type)
    {
        AnnType = type;
    }

    // 设置当前标注项的全部数据
    void setPoints(const vector<cv::Point> &p)
    {
        points = p;
    }

    // 添加一个点到当前标注数据中
    void addPoint(const cv::Point &p)
    {
        points.push_back(p);
    }

private:
    // 标注类型
    Type AnnType;

    // 标注项，也即点、多边形或者矩形的点的坐标
    vector<cv::Point> points;
};

#endif // IMAGEANNITEM_H
